// pages/index/index.js
const app = getApp()

Page({
  data: {
    connected: false,
    temperature: 0,
    humidity: 0,
    foodAmount: 0,
    als: 0,  // 环境光数据
    lightOn: false,  // 环境光开关状态
    deviceFd: '',  // 设备fd
    tempStatus: '加载中',
    tempStatusClass: 'normal',
    humidStatus: '加载中',
    humidStatusClass: 'normal',
    isFoodDispensing: false,
    lastUpdate: '未更新',
    mqttTopic: 'qtmqtt/topic1'
  },

  // 定时器ID
  refreshTimer: null,

  onLoad() {
    console.log('📱 首页加载')
    this.loadData()
    // 检查MQTT连接状态
    this.setData({
      connected: app.globalData.mqttConnected
    })
    
    // 启动定时刷新（每1秒刷新一次UI）
    this.startAutoRefresh()
  },

  onShow() {
    console.log('📱 首页显示')
    this.loadData()
    // 更新MQTT连接状态
    this.setData({
      connected: app.globalData.mqttConnected
    })
    
    // 重启定时刷新
    this.startAutoRefresh()
  },

  onHide() {
    console.log('📱 首页隐藏')
    // 停止定时刷新，节省资源
    this.stopAutoRefresh()
  },

  onUnload() {
    console.log('📱 首页卸载')
    // 清理定时器
    this.stopAutoRefresh()
  },

  // 启动自动刷新
  startAutoRefresh() {
    // 先清除可能存在的旧定时器
    this.stopAutoRefresh()
    
    // 每1秒刷新一次数据
    this.refreshTimer = setInterval(() => {
      this.loadData()
    }, 1000)
    
    console.log('✅ 自动刷新已启动')
  },

  // 停止自动刷新
  stopAutoRefresh() {
    if (this.refreshTimer) {
      clearInterval(this.refreshTimer)
      this.refreshTimer = null
      console.log('⏹️ 自动刷新已停止')
    }
  },

  // 加载数据
  loadData() {
    const deviceData = app.globalData.deviceData
    const mqttConfig = app.globalData.mqttConfig
    
    // 获取温度状态
    const tempStatus = app.getTempStatus()
    let tempStatusClass = 'normal'
    if (tempStatus.text === '温度过高' || tempStatus.text === '温度过低') {
      tempStatusClass = 'danger'
    }
    
    // 获取湿度状态
    const humidStatus = app.getHumidStatus()
    let humidStatusClass = 'normal'
    if (humidStatus.text === '湿度过高') {
      humidStatusClass = 'danger'
    } else if (humidStatus.text === '湿度过低') {
      humidStatusClass = 'warning'
    }
    
    this.setData({
      connected: app.globalData.mqttConnected,  // 更新连接状态
      temperature: deviceData.temperature.toFixed(1),
      humidity: deviceData.humidity.toFixed(1),
      foodAmount: deviceData.foodAmount,
      als: deviceData.als || 0,  // 环境光数据
      deviceFd: deviceData.deviceFd || '',  // 设备fd
      tempStatus: tempStatus.text,
      tempStatusClass: tempStatusClass,
      humidStatus: humidStatus.text,
      humidStatusClass: humidStatusClass,
      isFoodDispensing: deviceData.isFoodDispensing,
      lastUpdate: deviceData.lastUpdate || '未更新',
      mqttTopic: mqttConfig.topic
    })
  },

  // 跳转到温度详情页
  goToTemperature() {
    wx.switchTab({
      url: '/pages/temperature/temperature'
    })
  },

  // 跳转到湿度详情页
  goToHumidity() {
    wx.switchTab({
      url: '/pages/humidity/humidity'
    })
  },

  // 跳转到设置页
  goToSettings() {
    wx.switchTab({
      url: '/pages/settings/settings'
    })
  },

  // 切换MQTT连接
  onToggleMqtt() {
    if (this.data.connected) {
      // 断开连接
      this.disconnectMqtt()
    } else {
      // 连接MQTT
      this.connectMqtt()
    }
  },

  // 连接MQTT
  connectMqtt() {
    wx.showLoading({
      title: '连接中...',
      mask: true
    })
    
    app.connectMQTT()
    
    // 等待连接结果
    setTimeout(() => {
      wx.hideLoading()
      this.setData({
        connected: app.globalData.mqttConnected
      })
      
      if (app.globalData.mqttConnected) {
        wx.showToast({
          title: 'MQTT已连接',
          icon: 'success'
        })
      } else {
        wx.showToast({
          title: '连接失败',
          icon: 'error'
        })
      }
    }, 2000)
  },

  // 断开MQTT
  disconnectMqtt() {
    wx.showLoading({
      title: '断开中...',
      mask: true
    })
    
    const mqttClient = app.globalData.mqttClient
    if (mqttClient) {
      mqttClient.end()
      app.globalData.mqttConnected = false
      app.globalData.mqttClient = null
    }
    
    setTimeout(() => {
      wx.hideLoading()
      this.setData({
        connected: false
      })
      wx.showToast({
        title: '已断开连接',
        icon: 'success'
      })
    }, 500)
  },

  // 刷新数据
  onRefreshData() {
    wx.showLoading({
      title: '刷新中...',
      mask: true
    })
    
    // 重新加载当前数据
    this.loadData()
    
    setTimeout(() => {
      wx.hideLoading()
      wx.showToast({
        title: '刷新成功',
        icon: 'success',
        duration: 1500
      })
    }, 500)
  },

  // 投喂食物
  onFeedFood() {
    if (this.data.isFoodDispensing) {
      return
    }
    
    wx.showModal({
      title: '确认投喂',
      content: '确定要开始投喂吗？',
      success: (res) => {
        if (res.confirm) {
          this.startFeeding()
        }
      }
    })
  },

  // 开始投喂
  startFeeding() {
    wx.showLoading({
      title: '开始投喂...',
      mask: true
    })
    
    // 发送投喂命令（fd为int类型）
    const command = {
      fd: parseInt(this.data.deviceFd) || 0,  // 设备fd转为int
      feed: "1"  // 投喂命令（字符串格式）
    }
    
    // 使用新的 MQTT 发送方法
    app.sendMQTTMessage(command).then(() => {
      // 模拟投喂过程
      app.globalData.deviceData.isFoodDispensing = true
      this.setData({
        isFoodDispensing: true
      })
      
      wx.hideLoading()
      wx.showToast({
        title: '投喂命令已发送',
        icon: 'success'
      })
    }).catch((err) => {
      console.error('投喂命令发送失败:', err)
      wx.hideLoading()
      wx.showToast({
        title: '投喂失败',
        icon: 'error'
      })
    })
  },


  // 切换环境光
  onToggleLight() {
    const newState = !this.data.lightOn
    
    wx.showLoading({
      title: newState ? '打开中...' : '关闭中...',
      mask: true
    })
    
    // 发送环境光控制命令（fd为int类型）
    const command = {
      fd: parseInt(this.data.deviceFd) || 0,  // 设备fd转为int
      led: newState ? "1" : "0"  // 开是1，关是0（字符串格式，与Qt统一）
    }
    
    console.log('发送环境光控制命令:', command)
    
    // 使用新的 MQTT 发送方法
    app.sendMQTTMessage(command).then(() => {
      this.setData({
        lightOn: newState
      })
      
      wx.hideLoading()
      wx.showToast({
        title: newState ? '环境光已开启' : '环境光已关闭',
        icon: 'success'
      })
    }).catch((err) => {
      console.error('环境光控制失败:', err)
      wx.hideLoading()
      wx.showToast({
        title: '操作失败',
        icon: 'error'
      })
    })
  }
})

